home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / snip0493.zip / FCOMPARE.C < prev    next >
C/C++ Source or Header  |  1993-04-05  |  1KB  |  60 lines

  1. /*
  2. **  FCOMPARE.C - Compare 2 files
  3. **
  4. **  public domain demo by Bob Stout
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. enum {ERROR = -1, SUCCESS, FAIL};
  12.  
  13. #define BUFSIZE 16384
  14. static char buf[2][BUFSIZE];
  15.  
  16. int fcompare(const char *fname1, const char *fname2)
  17. {
  18.       FILE *f1, *f2;
  19.       int retval = SUCCESS;
  20.  
  21.       if (NULL == (f1 = fopen(fname1, "rb")))
  22.             return ERROR;
  23.       if (NULL != (f2 = fopen(fname2, "rb")))
  24.       {
  25.             size_t size1, size2;
  26.  
  27.             do
  28.             {
  29.                   size1 = fread(buf[0], 1, BUFSIZE, f1);
  30.                   size2 = fread(buf[1], 1, BUFSIZE, f2);
  31.                   if (0 == (size1 | size2))
  32.                         break;
  33.                   if ((size1 != size2) || memcmp(buf[0], buf[1], size1))
  34.                   {
  35.                         retval = FAIL;
  36.                         break;
  37.                   }
  38.             } while (size1 && size2);
  39.             fclose(f2);
  40.       }
  41.       else  retval = ERROR;
  42.       fclose(f1);
  43.       return retval;
  44. }
  45.  
  46. #ifdef TEST
  47.  
  48. int main(int argc, char *argv[])
  49. {
  50.       if (3 > argc)
  51.       {
  52.             puts("Usage: FCOMPARE file1 file2");
  53.             return 1;
  54.       }
  55.       printf("fcompare(%s, %s) returned %d\n", argv[1], argv[2],
  56.             fcompare(argv[1], argv[2]));
  57. }
  58.  
  59. #endif /* TEST */
  60.